package com.authority.framework.base.util;

import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.SimpleHash;

/**
 * @program: authority
 * @description: 加密用户密码
 * @author: Mr.Yan
 * @create: 2018-11-15 11:53
 **/
public class EncryptPassword {
	/**
	 * 随机生成 salt 需要指定 它的字符串的长度
	 *
	 * @param len 字符串的长度
	 * @return salt
	 */
	public static String generateSalt(int len) {
		//一个Byte占两个字节
		int byteLen = len >> 1;
		SecureRandomNumberGenerator secureRandom = new SecureRandomNumberGenerator();
		return secureRandom.nextBytes(byteLen).toHex();
	}

	/**
	 * 获取加密后的密码，使用默认hash迭代的次数 1 次
	 *
	 * @param hashAlgorithm hash算法名称 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512、etc。
	 * @param password      需要加密的密码
	 * @param salt          盐
	 * @return 加密后的密码
	 */
	public static String encryptPassword(String hashAlgorithm, String password, String salt) {
		return encryptPassword(hashAlgorithm, password, salt, 1);
	}

	/**
	 * 获取加密后的密码，需要指定 hash迭代的次数
	 *
	 * @param hashAlgorithm  hash算法名称 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512、etc。
	 * @param password       需要加密的密码
	 * @param salt           盐
	 * @param hashIterations hash迭代的次数
	 * @return 加密后的密码
	 */
	public static String encryptPassword(String hashAlgorithm, String password, String salt, int hashIterations) {
		SimpleHash hash = new SimpleHash(hashAlgorithm, password, salt, hashIterations);
		return hash.toString();
	}


	public static  void main (String [] arg0){
		String a = encryptPassword("SHA-256", "admin", null,1);
		System.out.println(a);
	}
}
